package com.rill.dao;

import java.sql.SQLException;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.rill.paging.Page;
import com.rill.po.Article;

public class ArticleDaoImpl extends HibernateDaoSupport implements ArticleDao {

	@Override
	public void add(Article article) {// 添加文章
		this.getHibernateTemplate().saveOrUpdate(article);
	}

	@Override
	public List<Article> queryUserAllArticle(String username) {// 查询用户所有文章
		List<Article> list = this.getHibernateTemplate().find(
				"select art from Article art where art.username = ?", username);
		// System.out.println(list.size());
		return list;

	}

	/*
	 * 查用户文章总记录数
	 */
	@Override
	public int queryUserAllCount(String username) {
		List find = this.getHibernateTemplate().find(
				"select count(*) from Article art where art.username = ?",
				username);
		return ((Long) find.get(0)).intValue();// 返回的是Object,转成long,再获取int值

	}

	/*
	 * 按照分页信息查询记录
	 */
	@Override
	public List<Article> queryByPage(final String username, final Page page) {
		return this.getHibernateTemplate().executeFind(new HibernateCallback() {// 回调函数，hibernate-Spring的API查询熟悉
					public Object doInHibernate(Session session)
							throws HibernateException, SQLException {
						Query query = session
								.createQuery("select art from Article art where art.username = ?");// hibernate的包
						// 设置参数
						query.setParameter(0, username);// username设置为final类型
						// 设置每页显示多少个，设置多大结果。
						query.setMaxResults(page.getEveryPage());
						// 设置起点
						query.setFirstResult(page.getBeginIndex());// 真分页而不是假分页（数据库中查找的是需要的数据而不是全部数据只显示需要的数据）
						return query.list();
					}
				});
	}

	/*
	 * 查询所有用户总记录数
	 */
	@Override
	public int queryAllCount() {
		List find = this.getHibernateTemplate().find(
				"select count(*) from Article art ");
		return ((Long) find.get(0)).intValue();
	}

	/*
	 * 按照分页显示所有文章
	 */
	@Override
	public List<Article> queryAllByPage(Page page) {
		return this.getHibernateTemplate().executeFind(new HibernateCallback() {
			public Object doInHibernate(Session session)
					throws HibernateException, SQLException {
				Query query = session
						.createQuery("select art from Article art order by art.date desc");
				// 设置每页显示多少个，设置多大结果。
				query.setMaxResults(page.getEveryPage());
				// 设置起点
				query.setFirstResult(page.getBeginIndex());
				return query.list();
			}
		});

	}

	/* 按照id查看文章内容
	 */
	@Override
	public Article queryArticleById(int id) {
		List find = this.getHibernateTemplate().find("select art from Article art where art.id=?",id);
		return (Article) find.get(0);
	}

}
